/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.base.domain.query;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Collection;
import java.util.Set;

/**
 *
 *
 * @author zgy
 * @date 2021-9-22
 */
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class GoodsBatchQuery {

	private static final int DEFAULT_PAGE_SIZE = 20;
	private static final int MAX_PAGE_SIZE = 1000;

	/**
	 * 返回记录的起始位置。
	 */
	private Integer offset;

	/**
	 * 返回记录的个数。
	 */
	private Integer rows;

	/**
	 * 构建一个查询。
	 *
	 * @param	pageIndex	页索引
	 */
	public GoodsBatchQuery(Integer pageIndex) {
		this(pageIndex, DEFAULT_PAGE_SIZE);
	}

	/**
	 * 构建一个查询。
	 *
	 * @param	pageIndex	页索引
	 * @param	pageSize	页大小
	 */
	public GoodsBatchQuery(Integer pageIndex, Integer pageSize) {
		int index = pageIndex == null ? 0 : pageIndex;
		int size = pageSize == null ? DEFAULT_PAGE_SIZE : pageSize;
		this.offset = index * size;
		this.rows = size;
	}

	/**
	 * 构造符合条件的查询对象，仅返回一条
	 *
	 * @return
	 */
	public static GoodsBatchQueryBuilder one() {
		return GoodsBatchQuery.builder().offset(0).rows(1);
	}

	/**
	 * 构造符合条件的查询对象，控制返回的记录上限
	 *
	 * @return
	 */
	public static GoodsBatchQueryBuilder max() {
		return GoodsBatchQuery.builder().offset(0).rows(MAX_PAGE_SIZE);
	}

	/**
	 * 批次代码
	 */
	private String goodsBatchCode;
	/**
	 * 批次代码
	 */
	private Set<String> goodsBatchCodeSet;
	/**
	 * 货主Id
	 */
	private Long goodsOwnerId;
	/**
	 * 货品Id
	 */
	private Long goodsId;
	/**
	 * 货品Id集合
	 */
	private Set<Long> goodsIdSet;
	/**
	 * 货号
	 */
	private String goodsCode;
	/**
	 * 货品编码集合
	 */
	private Set<String> goodsCodeSet;
	/**
	 * 货品长代码
	 */
	private String goodsFullCode;
	/**
	 * 货品长代码集合
	 */
	private Set<String> goodsFullCodeSet;
	/**
	 * 货品简称
	 */
	private String goodsAbbr;
	/**
	 * 生产日期
	 */
	private java.time.LocalDate productionDateBegin;
	/**
	 * 生产日期
	 */
	private java.time.LocalDate productionDateEnd;
	/**
	 * 到期日期
	 */
	private java.time.LocalDate expirationDateBegin;
	/**
	 * 到期日期
	 */
	private java.time.LocalDate expirationDateEnd;
	/**
	 * 风险日期
	 */
	private java.time.LocalDate riskDateBegin;
	/**
	 * 风险日期
	 */
	private java.time.LocalDate riskDateEnd;
	/**
	 * 冻结日期
	 */
	private java.time.LocalDate freezeDateBegin;
	/**
	 * 冻结日期
	 */
	private java.time.LocalDate freezeDateEnd;
	/**
	 * 状态：0-存盘，1-启用，2-停用，3-冻结
	 */
	private Integer status;
	/**
	 * 租户Id，0表示不指定
	 */
	private Long tenantId;

}
